/**
 * std-io.js 标准输入输出脚本
 * 
 * 功能：
 * 1. 逐条打印提示信息：姓名、邮箱、QQ 号和手机号码
 * 2. 读取用户键盘输入信息，保存到对象中
 * 3. 用户键盘输入结束后，打印完整的对象信息
 */

const readline = require('readline');

console.log('=== std-io.js 标准输入输出脚本 ===\n');

// 创建 readline 接口
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// 用户信息对象
const userInfo = {};

// 提示信息数组
const prompts = [
    { key: 'name', message: '请输入姓名：' },
    { key: 'email', message: '请输入邮箱：' },
    { key: 'qq', message: '请输入QQ号：' },
    { key: 'phone', message: '请输入手机号码：' }
];

let currentIndex = 0;

// 验证函数
function validateInput(key, value) {
    switch (key) {
        case 'name':
            if (!value.trim()) {
                return '姓名不能为空';
            }
            if (value.length < 2) {
                return '姓名至少需要2个字符';
            }
            break;
        case 'email':
            const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
            if (!emailRegex.test(value)) {
                return '请输入有效的邮箱地址';
            }
            break;
        case 'qq':
            const qqRegex = /^[1-9]\d{4,10}$/;
            if (!qqRegex.test(value)) {
                return 'QQ号必须是5-11位数字，且不能以0开头';
            }
            break;
        case 'phone':
            const phoneRegex = /^1[3-9]\d{9}$/;
            if (!phoneRegex.test(value)) {
                return '请输入有效的手机号码（11位，以1开头）';
            }
            break;
    }
    return null;
}

// 处理用户输入
function handleInput() {
    if (currentIndex >= prompts.length) {
        // 所有信息收集完毕
        console.log('\n=== 用户信息收集完成 ===');
        console.log('完整的用户信息：');
        console.log(JSON.stringify(userInfo, null, 2));
        
        // 格式化输出
        console.log('\n=== 格式化显示 ===');
        console.log('姓名：', userInfo.name);
        console.log('邮箱：', userInfo.email);
        console.log('QQ号：', userInfo.qq);
        console.log('手机号码：', userInfo.phone);
        
        console.log('\n=== 程序结束 ===');
        rl.close();
        return;
    }

    const currentPrompt = prompts[currentIndex];
    
    rl.question(currentPrompt.message, (input) => {
        const trimmedInput = input.trim();
        
        // 验证输入
        const validationError = validateInput(currentPrompt.key, trimmedInput);
        
        if (validationError) {
            console.log('❌ 错误：', validationError);
            console.log('请重新输入\n');
            // 重新询问当前项
            handleInput();
        } else {
            // 输入有效，保存到对象
            userInfo[currentPrompt.key] = trimmedInput;
            console.log('✅ 输入有效\n');
            currentIndex++;
            // 继续下一项
            handleInput();
        }
    });
}

// 显示使用说明
console.log('欢迎使用用户信息收集程序！');
console.log('请按照提示依次输入您的信息：\n');

// 开始收集信息
handleInput();

// 处理程序退出
rl.on('close', () => {
    console.log('\n感谢使用！');
    process.exit(0);
});

// 处理 Ctrl+C
rl.on('SIGINT', () => {
    console.log('\n\n程序被用户中断');
    rl.close();
});